package persistance.dal;

import java.sql.PreparedStatement;
import java.sql.SQLException;
import ucc.objects.ProduitDTO;
import exception.DataAccesException;

public class StockPersisterImpl implements ProduitPersister {

	private PreparedStatement queryInsert;
	private PreparedStatement queryUpdate;
	private static final String INSERT = "insert into caisse.produits (id_classe_de_produit, "
			+ "id_type_de_produit, marque, nom, id_contenance, prix_vente, image, actif)"
			+ "values (?, ?, ?, ?, ?, ?, ?, ?)";
	private static final String UPDATE = "update caisse.comptes_utilisateurs set "
			+ "id_classe_de_produit=?, id_type_de_produit=?, marque=?, nom=?, id_contenance=?, "
			+ "prix_vente=?, image=?, actif=? where id_produit=?";

	public StockPersisterImpl() {
		this.queryInsert = DalBackEndServices.INSTANCE.prepare(INSERT);
		this.queryUpdate = DalBackEndServices.INSTANCE.prepare(UPDATE);
	}

	public void insert(ProduitDTO nouveauProduit) {
		try {
			queryInsert.setInt(1, nouveauProduit.getClasseDeProduit().getId());
			queryInsert.setInt(2, nouveauProduit.getTypeDeProduit().getId());
			queryInsert.setString(3, nouveauProduit.getMarque());
			queryInsert.setString(4, nouveauProduit.getNom());
			queryInsert.setInt(5, nouveauProduit.getContenance().getId());
			queryInsert.setDouble(6, nouveauProduit.getPrixDeVente());
			queryInsert.setString(7, nouveauProduit.getImage());
			queryInsert.setBoolean(8, nouveauProduit.isActif());
			queryInsert.execute();
		} catch (SQLException sqlE) {
			sqlE.printStackTrace();
			throw new DataAccesException(
					"SQL/JDBC Connection, Statement, executeQuery problem \n",
					sqlE);
		}
	}

	public void update(ProduitDTO produit) {
		try {
			queryUpdate.setInt(1, produit.getClasseDeProduit().getId());
			queryUpdate.setInt(2, produit.getTypeDeProduit().getId());
			queryUpdate.setString(3, produit.getMarque());
			queryUpdate.setString(4, produit.getNom());
			queryUpdate.setInt(5, produit.getContenance().getId());
			queryUpdate.setDouble(6, produit.getPrixDeVente());
			queryUpdate.setString(7, produit.getImage());
			queryUpdate.setBoolean(8, produit.isActif());
			queryUpdate.setInt(9, produit.getId());
			queryUpdate.execute();
		} catch (SQLException sqlE) {
			sqlE.printStackTrace();
			throw new DataAccesException(
					"SQL/JDBC Connection, Statement, executeQuery problem \n",
					sqlE);
		}
	}
}
